home *** CD-ROM | disk | FTP | other *** search
/ CD School House 9 / CD School House 9.0 - Wayzata Technology (1994).iso / pc / dos / teachaid / pccai / caiarc1.exe / CAIGRADE.BAS < prev    next >
BASIC Source File  |  1993-12-06  |  10KB  |  217 lines

  1. 10 DEFINT I-K, O
  2. 20 CLS : SCREEN 0: WIDTH 80: KEY OFF
  3. 30 DIM Y(1000), T(5), P8(10), P9(10)
  4. 40 DIM NAM$(1000), ORJ(1000)
  5. 50 COLOR 15, 0
  6. 60 '..............................................DISPLAY INTRO
  7. 70 LOCATE 5, 29: PRINT "PC-CAI Grading Program"
  8. 80 LOCATE 8, 10: PRINT "This program is provided to give you an example of how to"
  9. 90 LOCATE 9, 10: PRINT "extract information from the grade file created by PC-CAI."
  10. 100 LOCATE 10, 10: PRINT "You may have to change the program to meet your specific needs."
  11. 110 PRINT : PRINT
  12. 120 PRINT "(D)irectory (G)rade (E)nd   Please Choose :"; : LOCATE , , 1
  13. 130 Q$ = INKEY$: IF Q$ = "" THEN 130
  14. 140   PRINT Q$; : IF Q$ = "D" OR Q$ = "d" THEN 180'......directory
  15. 150   IF Q$ = "G" OR Q$ = "g" THEN 210'..................grade
  16. 160   IF Q$ = "E" OR Q$ = "e" THEN CLS : SYSTEM'.........end program
  17. 170 GOTO 130
  18. 180 PRINT : PRINT "Input directory specification (i.e., A:*.OUT) :"; : INPUT SD$
  19. 190 FILES SD$: PRINT : GOTO 120
  20. 200 '..................................................................grade
  21. 210 PRINT : PRINT "GRADING SELECTION": PRINT
  22. 220 PRINT "Please indicate the name of the grade file you wish to use."
  23. 230 PRINT "ENTER NAME OF GRADE FILE :"; : INPUT GF$
  24. 240 ON ERROR GOTO 260
  25. 250 CLOSE 1: OPEN "i", 1, GF$: GOTO 270
  26. 260 SOUND 100, 10: PRINT : PRINT "ERROR *** GRADE FILE NAMED "; GF$; " NOT FOUND.": RESUME 120
  27. 270 ON ERROR GOTO 0
  28. 280 PRINT : PRINT "SELECT OUTPUT TO (S)creen or (P)rinter or (E)nd:"; : LOCATE , , 1
  29. 290 Q$ = INKEY$: IF Q$ = "" THEN 290
  30. 300   PRINT Q$; : IF Q$ = "S" OR Q$ = "s" THEN PRINTER = 0: GOTO 340
  31. 310   IF Q$ = "P" OR Q$ = "p" THEN PRINTER = 1: GOTO 340
  32. 320   IF Q$ = "E" OR Q$ = "e" THEN RUN
  33. 330 GOTO 290
  34. 340 PRINT : PRINT "Choose (D)etailed output or (S)ummary output or (E)nd:"; : LOCATE , , 1
  35. 350 SUMOUT = 0
  36. 360 Q$ = INKEY$: IF Q$ = "" THEN 360
  37. 370   PRINT Q$; : IF Q$ = "D" OR Q$ = "d" THEN 410
  38. 380   IF Q$ = "S" OR Q$ = "s" THEN SUMOUT = 1: GOTO 410
  39. 390   IF Q$ = "E" OR Q$ = "e" THEN RUN
  40. 400 GOTO 360
  41. 410 IF EOF(1) THEN 1130
  42. 420 LINE INPUT #1, A$
  43. 430 IF INSTR(A$, "@@@@@@@") > 0 THEN 440 ELSE GOTO 410'....begin new person
  44. 440 IF SUMOUT = 0 THEN
  45. 450   IF PRINTER = 1 THEN LPRINT STRING$(50, "-") ELSE PRINT STRING$(50, "-")
  46. 460 END IF
  47. 470 LINE INPUT #1, STUFF$ '...............pull off date and time info
  48. 480    FDATE$ = MID$(STUFF$, 6, 11)
  49. 490    FTIME$ = MID$(STUFF$, 22, 8)
  50. 500    NINFO = VAL(MID$(STUFF$, 36, 5))
  51. 510    NQUEST = VAL(MID$(STUFF$, 47, 7))
  52. 520    ISSUM = 0: IF INSTR(STUFF$, "SUMMARY") > 0 THEN ISSUM = 1
  53. 530 '.............................................print info stuff out
  54. 540   IF SUMOUT = 0 THEN
  55. 550     IF PRINTER = 0 THEN PRINT : PRINT FDATE$, FTIME$
  56. 560     IF PRINTER = 1 THEN LPRINT : LPRINT FDATE$, FTIME$
  57. 570    END IF
  58. 580 IF NINFO > 0 THEN
  59. 590    FOR I = 1 TO NINFO: LINE INPUT #1, INF$
  60. 600    IF I = 1 THEN GRADEINF$ = INF$' info to use in output summary
  61. 610    IF SUMOUT = 0 THEN
  62. 620       IF PRINTER = 1 THEN LPRINT INF$ ELSE PRINT INF$
  63. 630    END IF
  64. 640    NEXT I
  65. 650 END IF
  66. 660 IF PRINTER = 0 AND SUMOUT = 0 THEN PRINT  ELSE LPRINT
  67. 670 IF ISSUM <> 1 THEN
  68. 680   FOR I = 1 TO NQUEST'...............results of individual questions
  69. 690     INPUT #1, ANS$
  70. 700     NUM = VAL(MID$(ANS$, 4))'.get question number
  71. 710     K = INSTR(ANS$, "Y:")' locate the TRY: marker
  72. 720     TRY = VAL(MID$(ANS$, K + 3))
  73. 730     IF SUMOUT = 0 THEN
  74. 740      IF PRINTER = 0 THEN
  75. 750               PRINT NUM; " Answered "; :
  76. 760               IF TRY = 0 THEN
  77. 770                       PRINT " INCORRECTLY."
  78. 780                ELSE
  79. 790                        PRINT " correctly on try number "; TRY
  80. 800                END IF
  81. 810         END IF
  82. 820       IF PRINTER = 1 THEN
  83. 830                        LPRINT NUM; " Answered ";
  84. 840                        IF TRY = 0 THEN
  85. 850                                LPRINT " INCORRECTLY."
  86. 860                        ELSE
  87. 870                                LPRINT " correctly on try number "; TRY
  88. 880                       END IF
  89. 890      END IF
  90. 900     END IF
  91. 910   NEXT I
  92. 920 END IF
  93. 930 LINE INPUT #1, SUMM$'.......................get the summary line
  94. 940 RIGHT = VAL(MID$(SUMM$, 15))
  95. 950 K = INSTR(SUMM$, "of")'.......find of marker in line
  96. 960 WRONG = NQUEST - RIGHT
  97. 970 IF SUMOUT = 0 THEN
  98. 980   IF PRINTER = 0 THEN PRINT : PRINT "Number of Questions = "; NQUEST
  99. 990   IF PRINTER = 1 THEN LPRINT : LPRINT "Number of Questions = "; NQUEST
  100. 1000   IF PRINTER = 0 THEN PRINT "Number answered wrong ="; WRONG
  101. 1010   IF PRINTER = 1 THEN LPRINT "Number answered wrong ="; WRONG
  102. 1020   IF PRINTER = 0 THEN PRINT "Number answered right ="; RIGHT
  103. 1030   IF PRINTER = 1 THEN LPRINT "Number answered right ="; RIGHT
  104. 1040 END IF
  105. 1050 ZGRADE = (RIGHT / NQUEST) * 100:
  106. 1060 IF SUMOUT = 0 THEN
  107. 1070   IF PRINTER = 1 THEN LPRINT : LPRINT "PERCENTAGE RIGHT = "; ZGRADE; " %"
  108. 1080   IF PRINTER = 0 THEN PRINT : PRINT "PERCENTAGE RIGHT = "; ZGRADE; " %"
  109. 1090   IF PRINTER = 0 THEN PRINT : PRINT "Please press ENTER "; : LINE INPUT Q$
  110. 1100 END IF
  111. 1110 GKT = GKT + 1: Y(GKT) = ZGRADE:
  112. 1120 NAM$(GKT) = LEFT$(GRADEINF$, 60): ORJ(GKT) = GKT: GOTO 410
  113. 1130 N = GKT: GOSUB 1160'summary statistics
  114. 1140 GOSUB 1980
  115. 1150 PRINT : PRINT "Press ENTER "; : LINE INPUT Q$: RUN
  116. 1160 ' ------------------------------------------statistics subroutines
  117. 1170 'IF printer = 0 THEN PRINT : PRINT "Number of observations : "; n
  118. 1180 'IF printer = 1 THEN LPRINT : LPRINT "Number of observations : "; n
  119. 1190 PRINT "Calculating Summary Statistics..."; : AX = CSRLIN: AY = POS(0)
  120. 1200 IF N < 2 THEN PRINT "Too few grades to calculate statistics.": RETURN
  121. 1210 REM CALL STATISTICS SUBROUTINE
  122. 1220 P9(1) = 0
  123. 1230 N8 = 7
  124. 1240 P9(2) = 25
  125. 1250 P9(3) = 50
  126. 1260 P9(4) = 75
  127. 1270 P9(5) = 100
  128. 1280 P9(6) = 2.5
  129. 1290 P9(7) = 97.5
  130. 1300 GOSUB 1630
  131. 1310 FOR I = 1 TO 5
  132. 1320 T(I) = P8(I)
  133. 1330 NEXT I
  134. 1340 REM so is s.d.
  135. 1350     S0 = V ^ .5
  136. 1360     REM S5 IS SEM
  137. 1370     S5 = (V / N) ^ .5
  138. 1380 LOCATE AX, 1: PRINT SPACE$(70); : PRINT
  139. 1390 IF PRINTER = 1 THEN 1460 ELSE PRINT
  140. 1400 PRINT "Summary Information": PRINT STRING$(70, "-"): PRINT
  141. 1410 PRINT USING "N       = ######.###"; N
  142. 1420 PRINT USING "Mean    = ######.###               St. Dev  = #######.###"; A; S0
  143. 1430 PRINT USING "Median  = ######.###               S.E.M.   = #######.###"; T(3); S5
  144. 1440 PRINT USING "Minimum = ######.###               Sum      = #######.###"; T(1); S2
  145. 1450 PRINT USING "Maximum = ######.###               Variance = #######.###"; T(5); V: GOTO 1530
  146. 1460 LPRINT
  147. 1470 LPRINT "Summary Information": LPRINT STRING$(70, "-"): LPRINT
  148. 1480 LPRINT USING "N       = ######.###"; N
  149. 1490 LPRINT USING "Mean    = ######.###               St. Dev  = #######.###"; A; S0
  150. 1500 LPRINT USING "Median  = ######.###               S.E.M.   = #######.###"; T(3); S5
  151. 1510 LPRINT USING "Minimum = ######.###               Sum      = #######.###"; T(1); S2
  152. 1520 LPRINT USING "Maximum = ######.###               Variance = #######.###"; T(5); V
  153. 1530 IF N < 5 THEN RETURN
  154. 1540 IF PRINTER = 0 THEN PRINT : PRINT "Five number summary ( 0,25,50,75,and 100 th percentile)"
  155. 1550 IF PRINTER = 1 THEN LPRINT : LPRINT "Five number summary ( 0,25,50,75,and 100 th percentile)"
  156. 1560 IF PRINTER = 0 THEN PRINT : PRINT USING "     (###.##, ###.##, ###.##, ###.##, ###.##)"; T(1); T(2); T(3); T(4); T(5): PRINT
  157. 1570 IF PRINTER = 1 THEN LPRINT : LPRINT USING "     (###.##, ###.##, ###.##, ###.##, ###.##)"; T(1); T(2); T(3); T(4); T(5): LPRINT
  158. 1580 RETURN
  159. 1590     REM STATISTICS SUBROUTINE------------------------------
  160. 1600     REM INPUT IS ARRAY Y(.) AND LENGTH N
  161. 1610     REM
  162. 1620     REM FIRST RANK THA DATA
  163. 1630     GOSUB 1860 'rank
  164. 1640     FOR I = 1 TO N8
  165. 1650     P = P9(I) / 100
  166. 1660         J = INT((N + 1) * P)
  167. 1670         G = ((N + 1) * P) - J
  168. 1680     IF J = 0 THEN P8(I) = Y(1)
  169. 1690     IF J = 0 THEN GOTO 1730
  170. 1700     IF J >= N THEN P8(I) = Y(N)
  171. 1710     IF J >= N THEN GOTO 1730
  172. 1720     P8(I) = (1 - G) * Y(J) + G * Y(J + 1)
  173. 1730     NEXT I
  174. 1740     REM ----------------S1=SUM OF SQUARES----S2=SUM----------
  175. 1750     S2 = 0
  176. 1760     S1 = 0
  177. 1770     FOR I = 1 TO N
  178. 1780     S2 = S2 + Y(I)
  179. 1790     S1 = S1 + (Y(I) * Y(I))
  180. 1800     NEXT I
  181. 1810     A = S2 / N
  182. 1820     S3 = S1 - S2 * S2 / N
  183. 1830     V = S3 / (N - 1)
  184. 1840     RETURN
  185. 1850     REM SUBROUTINE RANK---------------------------
  186. 1860     K = 1
  187. 1870     FOR I = 1 TO N
  188. 1880     IF K = 0 THEN 1950
  189. 1890     K = 0
  190. 1900     FOR J = 1 TO N - 1
  191. 1910     IF Y(J) <= Y(J + 1) THEN 1940
  192. 1920     SWAP Y(J), Y(J + 1)
  193. 1930 SWAP ORJ(J), ORJ(J + 1)
  194. 1940     K = 1
  195. 1950     NEXT J
  196. 1960     NEXT I
  197. 1970     RETURN
  198. 1980 IF N > 10 AND PRINTER = 0 THEN PRINT "Press Enter"; : LINE INPUT Q$
  199. 1990 IF PRINTER = 0 THEN PRINT : PRINT "Identification                                                   Grade   Rank"
  200. 2000 IF PRINTER <> 0 THEN LPRINT : LPRINT "Identification                                                   Grade   Rank"
  201. 2010 IF PRINTER = 0 THEN PRINT "---------------------------------------------                    ------- ----"
  202. 2020 IF PRINTER <> 0 THEN LPRINT "---------------------------------------------                    ------- ----"
  203. 2030 IF PRINTER = 0 THEN PRINT "  " ELSE LPRINT "  "
  204. 2040 FOR I = 1 TO N
  205. 2050 FOR J = 1 TO N
  206. 2060   IF ORJ(J) <> I GOTO 2120
  207. 2070   INF$ = NAM$(I): IF NAM$(I) = "" THEN INF$ = "TEST #" + STR$(I)
  208. 2080   IF PRINTER = 0 THEN PRINT INF$, TAB(65);  ELSE LPRINT INF$, TAB(65);
  209. 2090   IF PRINTER = 0 THEN PRINT USING "###.##   ###"; Y(J); N - J + 1
  210. 2100   IF PRINTER = 1 THEN LPRINT USING "###.##   ###"; Y(J); N - J + 1
  211. 2110   GOTO 2130
  212. 2120 NEXT J
  213. 2130 NEXT I
  214. 2140 IF PRINTER = 1 THEN LPRINT CHR$(12); '..cause the printer to page
  215. 2150 RETURN
  216.  
  217.